# 创建log目录（如果不存在）
import os
import logging
from logging.handlers import RotatingFileHandler
import time
from functools import wraps
from datetime import datetime


log_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'log')
if not os.path.exists(log_dir):
    os.makedirs(log_dir)
    print(f"创建日志目录: {log_dir}")
 
# 创建全局日志器
def setup_logger():
    """
    设置全局日志器
    """
    # 创建日志器
    logger = logging.getLogger('app')
    
    # 如果日志器已经有处理器，直接返回（避免重复添加处理器）
    if logger.handlers:
        return logger
    
    # 设置日志级别
    logger.setLevel(logging.INFO)
    
    # 创建日志格式
    formatter = logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    )
    
    # 创建文件处理器
    log_file = os.path.join(log_dir, f'{datetime.now().strftime("%m%d-%H%M")}.log')
    print(f"日志文件路径: {log_file}")
    
    try:
        file_handler = RotatingFileHandler(
            log_file,
            maxBytes=10*1024*1024,  # 10MB
            backupCount=5,
            encoding='utf-8'
        )
        file_handler.setFormatter(formatter)
        file_handler.setLevel(logging.INFO)
        
        # 创建控制台处理器
        console_handler = logging.StreamHandler()
        console_handler.setFormatter(formatter)
        console_handler.setLevel(logging.INFO)
        
        # 添加处理器到日志器
        logger.addHandler(file_handler)
        logger.addHandler(console_handler)
        
        # 测试日志写入
        logger.info("全局日志器初始化成功")
        print(f"全局日志器初始化成功，日志文件: {log_file}")
        
    except Exception as e:
        print(f"创建日志文件失败: {str(e)}")
        raise
    
    return logger

# 创建全局日志器实例
logger = setup_logger()

def get_logger(name):
    """
    获取子日志器（继承自全局日志器）
    
    Args:
        name: 日志器名称，通常使用 __name__
    
    Returns:
        logging.Logger: 配置好的日志器实例
        
    Usage:
        logger = get_logger(__name__)
        # 下面每一条都可以打印日志，设置为不同的错误级别
        logger.debug('这是一条调试信息')
        logger.info('这是一条普通信息')
        logger.warning('这是一条警告信息')
        logger.error('这是一条错误信息')
        logger.critical('这是一条严重错误信息')
    """
    # 创建子日志器
    sub_logger = logging.getLogger(f'app.{name}')
    return sub_logger    
    
def timer(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        start_time = time.time()  # 记录开始时间
        result = func(*args, **kwargs)  # 执行函数
        end_time = time.time()  # 记录结束时间
        logger.info(f"函数 {func.__name__} 执行时间: {end_time - start_time:.4f} 秒")
        return result
    return wrapper